1. Field of the Invention
The present invention relates generally to the use of MIDI files with musical synthesizers, and more specifically to a system and method for translating certain portions of MIDI files.
2. Description of the Prior Art
The Musical Instrument Digital Interface (MIDI) was established as a hardware and software specification which would make it possible to exchange information between different musical instruments or other devices such as sequencers, computers, lighting controllers, mixers, etc. A description of the interface can be found in MIDI 1.0 DETAILED SPECIFICATION, document version 4.1, Jan. 1989. The various uses and details of the MIDI specification have been well documented in the art.
A MIDI performance can be stored in a data file for later replay. Such file contains data describing various musical events, such as the turning on or off of various notes. The data also defines changes in performance parameters such as volume, tremoloe, etc. Some synthesizers can emulate many different musical instruments, and generate sounds which are not matched by any musical instruments. The different instrument sounds which can be played are commonly referred to as "voices".
A controller known as a sequencer reads a data file and generates a serial data stream used to control synthesizers and other instruments. The serial data stream is generated in real time, and contains "events" for controlling synthesizers and other instruments. The receiving synthesizer acts upon an event in a serial data stream as soon as it is received. The MIDI specification provides for 16 channels in the serial data stream, and each event identifies a channel to which it applies.
One type of event, called a "program change" in MIDI, defines the mapping of voices to MIDI channels. A program change event includes a channel number (1 to 16), and a number indicating which voice is to be played on that channel. Thus, for example, if instrument number 27 is defined to be a celeste, a program change on channel 1 with instrument number 27 tells the synthesizer to use its celeste voice, or nearest equivalent, on channel 1. Unfortunately, the usage of voice numbers by synthesizers has not been standardized, so that any given voice number can represent different voices on different synthesizers.
Until now, a knowledgeable MIDI programmer has been required to edit a MIDI file to match program changes to any synthesizers used to replay a MIDI performance. When distributed, many MIDI files do not include any program changes as a result of the nonstandardization problem; instead, comments which describe the voices to be used for each channel are often included in so-called "meta-events" which are used to carry instrument names. The MIDI programmer reads these instrument name meta-events, and inserts any required program changes into the file using a sophisticated editor.
It would be desirable to provide a system and method for automatically determining the voices required by a MIDI file, and inserting the proper program change events into the file. It would be further desirable for such a system and method to leave all of the original data in the file in intact.